Integrated circuits (ICs or Chips) are used in a wide variety of systems including personal computers, embedded controllers, cell phones, and other communication devices to name only a few. Circuit designers often employ computer aided techniques for circuit design and simulation. Standard languages such as Hardware Description Languages (HDLs) have been developed to describe digital circuits to aide in the design and simulation of complex digital circuits. Several hardware description languages, including but not limited to VHDL and Verilog, have evolved as industry standards. VHDL and Verilog are general purpose hardware description languages that allow definition of a hardware model at the gate level, the register transfer level (RTL) or the behavioral level using abstract data types. As device technology continues to advance, various product design tools have been developed to adapt HDLs for use with newer devices and design styles.
In designing an integrated circuit with an HDL code, the code is first written and then compiled by an HDL compiler. The HDL source code describes at some level the circuit elements, and the compiler produces an RTL netlist from this compilation. The RTL netlist is typically a technology independent netlist in that it is independent of the technology/architecture of a specific vendor's integrated circuit, such as field programmable gate arrays (FPGA) or an application-specific integrated circuit (ASIC). The RTL netlist corresponds to a schematic representation of circuit elements (as opposed to a behavioral representation). A correlating (mapping) operation is then performed to convert from the technology independent RTL netlist to a technology specific netlist which can be used to create circuits in the vendor's technology/architecture. FPGA vendors utilize different technology/architecture to implement logic circuits within their integrated circuits. Thus, the technology independent RTL netlist is mapped to create a netlist which is specific to a particular vendor's technology/architecture.
After the HDL code is written and compiled, the design of an integrated circuit (IC or chip) or a system which includes multiple ICs is verified to be correct. Continually advancing processing technology and the corresponding explosion in design size and complexity have led to verification problems for complex circuit designs, such as but not limited to ASICs that are difficult to solve using traditional simulation tools and techniques. Examples of current simulation tools include ModelSim, VCS and NCSIM simulation tools.
As a result, some designers build prototype boards using multiple ICs such as FPGAs to verify their ASIC designs. However, there are still problems with debugging the hardware designs. When an error is detected during debug, designers may attempt to tap signals of interest from the circuit and use a logic analyzer to determine the cause of the error. JTAG (Joint Test Action Group) is a well known technique for testing and debugging sub-blocks of integrated circuits through gaining access to information about the sub-block. However, this is a difficult process and is often not effective, especially in the case of intermittent errors. Simulators can be used to debug errors. However, errors that have already occurred are often difficult to repeat and reconstruct. Further, depending on the complexity, it may take a simulation a substantial amount of time to get to the point where an error has occurred.